//app.js
var hopeApi = require('./vendor/hope-sdk/index.js');
var config     = require('./config');
import WxService from './libs/plugins/wx-service/WxService';
App({
  WxService: new WxService,
  globalData: {
    // tabBar: [
    //   {
    //   "pagePath": "/pages/index/index",
    //   "text": "首页",
    //   "iconPath": "/static/images/tabbar/home_gray.png",
    //   "selectedIconPath": "/static/images/tabbar/home_active.png",
    //   "isDot": false
    // },
    // {
    //   "pagePath": "/pages/category/category",
    //   "text": "分类",
    //   "iconPath": "/static/images/tabbar/category_gray.png",
    //   "selectedIconPath": "/static/images/tabbar/category_active.png",
    //   "isDot": false
    // },
    // {
    //   "pagePath": "/pages/activity/apply/apply",
    //   "text": "安装",
    //   "iconPath": "/static/images/tabbar/tyre_gray.png",
    //   "hump": true,
    //   "selectedIconPath": "/static/images/tabbar/tyre_active.png"
    // },
    // {
    //   "pagePath": "/pages/message/message",
    //   "text": "通知",
    //   "iconPath": "/static/images/tabbar/message_gray.png",
    //   "selectedIconPath": "/static/images/tabbar/message_active.png",
    //   "isDot": false
    // },
    // {
    //   "pagePath": "/pages/my/my",
    //   "text": "我的",
    //   "iconPath": "/static/images/tabbar/mine_gray.png",
    //   "selectedIconPath": "/static/images/tabbar/mine_active.png"
    // }
    // ],
    'logined': false,      //用户是否登录
    'authsetting': null,   //用户授权结果
    'userinfo': null       //用户信息(包含自定义登录态token)
  },
  editTabbar: function () {
    let tabbar = this.globalData.tabBar;
    let currentPages = getCurrentPages();
    let _this = currentPages[currentPages.length - 1];
    let pagePath = _this.route;
    (pagePath.indexOf('/') != 0) && (pagePath = '/' + pagePath);
    for (let i in tabbar) {
      tabbar[i].selected = false;
      (tabbar[i].pagePath == pagePath) && (tabbar[i].selected = true);
    }
    _this.setData({
      tabBar: tabbar
    });
  },
  onLaunch: function () {
    var that = this;
    hopeApi.login.setLoginUrl(config.service.loginUrl);
    hopeApi.login.setHeader(config.header);
    hopeApi.login.setAuthUrl(config.service.authUrl);

    // 获取登录态信息
    hopeApi.login.getLoginInfo().then(function (res) {
      if ((typeof res !== 'undefined') && res.token) {
        that.globalData.logined = true;
        that.globalData.userinfo = res;
        that.globalData.authsetting = res.isauth;
        //执行页面定义的回调方法
        (that.loginedCb && typeof (that.loginedCb) === 'function') && that.loginedCb();
      } else {
        return Promise.reject({
          errMsg: 'LoginInfo miss token!',
        });
      }
    }).catch(function (error) {
      console.log(error);
      wx.showModal({
        title: 'Error',
        content: error.errMsg,
      });
      return false;
    });
  },

  /**
  * 封装小程序页面的公共方法
  * 在小程序页面onLoad里调用
  * @param {Object}  pageObj   小程序页面对象Page
  * @param {Boolean} needAuth  是否检验用户授权(scope.userInfo)
  * @return {Object}           返回Promise对象，resolve方法执行验证登录成功后且不检验授权(特指scope.userInfo)的回调函数，reject方法是验证登录失败后的回调
  */
  pageOnLoadInit: function (pageObj, needAuth = false) {
    var _this = this;
    return new Promise((resolve, reject) => {
      _this.pageGetLoginInfo(pageObj).then(function (res) {
        // console.log(_this.globalData.logined);
        if (res.logined === true) {
          //登录成功、无需授权
          resolve(res);
          if (needAuth) {
            if (res.authsetting === 0 || typeof res.authsetting === 'undefined') {
              hopeApi.common.navigateTo('/pages/auth/auth');
            }
          }
        } else {
          reject({
            'errMsg': 'Fail to login.Please feedback to manager.'
          });
        }
      });
    });
  },
  /**
  * 获取小程序注册时返回的自定义登录态信息（小程序页面中调用）
  * 主要是解决pageObj.onLoad 之后app.onLaunch()才返回数据的问题
  */
  pageGetLoginInfo: function (pageObj) {
    var _this = this;
    return new Promise((resolve, reject) => {
      if (_this.globalData.logined == true) {
        hopeApi.wxapi.wxsetData(pageObj, {
          'logined': _this.globalData.logined,
          'authsetting': _this.globalData.authsetting,
          'userinfo': _this.globalData.userinfo
        }).then(function (data) {
          //执行pageObj.onShow的回调方法
          (pageObj.authorizedCb && typeof (pageObj.authorizedCb) === 'function') && pageObj.authorizedCb(data);
          resolve(data);
        });

      } else {
        /**
         * 小程序注册时，登录并发起网络请求，请求可能会在 pageObj.onLoad 之后才返回数据
         * 这里加入loginedCb回调函数来预防，回调方法会在接收到请求后台返回的数据后执行，详看app.onLaunch()
         */
        _this.loginedCb = () => {
          hopeApi.wxapi.wxsetData(pageObj, {
            'logined': _this.globalData.logined,
            'authsetting': _this.globalData.authsetting,
            'userinfo': _this.globalData.userinfo
          }).then(function (data) {
            //执行pageObj.onShow的回调方法
            (pageObj.authorizedCb && typeof (pageObj.authorizedCb) === 'function') && pageObj.authorizedCb(data);
            resolve(data);
          });
        }
      }
    });
  },
   /**
   * 封装小程序页面的公共方法
   * 在小程序页面onShow里调用
   * @param {Object}  pageObj   小程序页面对象Page
   * @return {Object}           返回Promise对象，resolve方法执行验证授权(特指scope.userInfo)成功后的回调函数，reject方法是验证授权失败后的回调
   */
  pageOnShowInit: function(pageObj) {
    var _this = this;
    return new Promise((resolve, reject) => {
      /**
       * 这里通过pageObj.data.authsetting == (null || undefined)
       * 来区分pageObj.onLoad方法中是否已经执行完成设置页面授权列表(pageObj.data.authsetting)的方法，
       * 
       * 因为如果已经执行完成设置页面授权列表(pageObj.data.authsetting)的方法，并且获取到的授权列表为空的话，会把pageObj.data.authsetting赋值为
       * 空对象 pageObj.data.authsetting = {} ，所以pageObj.data.authsetting倘若要初始化时，请务必初始化为 null ，不能初始化为 {}，切记！
       */
      if (pageObj.data.authsetting === 0 || typeof pageObj.data.authsetting === 'undefined') {
        /**
         * pageObj.onLoad是异步获取用户授权信息的，很大可能会在 pageObj.onShow 之后才返回数据
         * 这里加入authorizedCb回调函数预防，回调方法会在pageObj.onLoad拿到用户授权状态列表后调用，详看app.pageOnLoadInit()
         */
        pageObj.authorizedCb = (res) => {
          if (res.authsetting === 1) {
            //授权成功执行resolve
            resolve();
          } else {
            reject();
          }
        }
      } 
      else
       {
        if (pageObj.data.authsetting === 1) {
          //授权成功执行resolve
          resolve();
        } else {
          reject();
        }
      }
    });
  },

  checkMessageCount: function () {
    var that = this;
    hopeApi.request.request(this, {
      url: config.service.messageCount,
      login: false,
      success: function (res) {
        if (res.data.code == 1) {
          // let tabbar = that.globalData.tabBar;
          // let currentPages = getCurrentPages();
          // let _this = currentPages[currentPages.length - 1];
          // let pagePath = _this.route;
          // (pagePath.indexOf('/') != 0) && (pagePath = '/' + pagePath);
          // tabbar[0].num = res.data.data;
          // _this.setData({
          //   tabBar: tabbar
          // });
          if(res.data.data > 0){
            wx.setTabBarBadge({
              index: 0,
              text: res.data.data + ''
            })
          }else{
            wx.hideTabBarRedDot({
              index: 0
            })
          }
        }
      }
    })
  }
})